package proto

import (
	"regexp"
	"sort"
	"time"
	D "websocket_apn/define"
	"websocket_apn/log"
)

/*
进入仙盟
[DEBUG] [2024/04/27 16:49:00] [PRJ/websocket_apn/main_test.go]:[  190]:   MessageID: ↑↑↑↑↑ Client.443
[DEBUG] [2024/04/27 16:49:00] [PRJ/websocket_apn/main_test.go]:[  194]:   S_UNION_ENTER - id:3109673861602
[DEBUG] [2024/04/27 16:49:00] [PRJ/websocket_apn/main_test.go]:[  195]:   PayloadBytes: 71 AB 00 00 00 12 00 00 56 56 00 00 02 D4 07 01 81 E2
砍价进度
game cmd[2165]-unkown - id:3109673861602
71 AB 00 00 04 8C 00 00 08 75 00 00 02D4 07 01 81 E2 08 AD 08 10 93 4E 18 01 20 97 93 B7 B1 06 28 E3 14 30 16 38 29 42 1D 0A 0F E4 BF AE E4 BB 99 E3 80 81 E5 B0 8F E8 83 96 10 EF 04 18 00 20 96 A8 F8 B7 C0 5A 42 14 0A 06 E6 98 86 E5 8D A1 10 FA 03 18 00 20 DD AE DC B7 C0 5A 421C 0A 0E E4 BF AE E4 BB 99 C2 B7 E6 98 8E E6 9C 88 10 9B 02 18 00 20 B3 82 D5 B7 C0 5A 42 1A 0A 0C E6 89 BE E4 B8 AA E6 83 85 E4 BA BA 10 8D 02 18 00 20 D6 E9 E4 B7 C0 5A 42 20 0A 12 E4 BF AE E4 BB 99 E4 B8 B6 E5 A4 A9 E4 BC 9A E4 BA AE 1089 02 18 00 20 F1 B4 F2 B7 C0 5A 42 20 0A 12 E4 BF AE E4 BB 99 E3 80 81 E5 86 B0 E6 B7 87 E6 B7 8B 10 97 01 18 00 20 F0 FC 81 B8 C0 5A 42 20 0A 12 E6 85 95 E5 AE B9 E5 A9 B4 E6 B2 82 E4 BB 99 E5 B0 8A 10 89 01 18 00 20 D3 8B D8 B7 C0 5A 421B 0A 0E E4 BF AE E4 BB 99 C2 B7 E5 A4 8F E5 A4 A9 10 66 18 00 20 D9 E9 DA B7 C0 5A 42 19 0A 0C E4 BF AE E4 BB 99 E3 80 81 E6 98 9F 10 5F 18 00 20 EA CE FE B7 C0 5A 42 1F 0A 12 E5 B1 B1 E4 B8 9C E4 BB 80 E4 B9 88 E5 9C B0 E6 96 B9 103C 18 00 20 BC D1 DA B7 C0 5A 42 1C 0A 0F E4 BF AE E4 BB 99 E3 80 81 E9 81 93 E7 A5 96 10 1F 18 00 20 9B AF ED B7 C0 5A 42 19 0A 0C E8 99 9E E5 B0 81 E7 A5 96 E5 B8 88 10 1C 18 00 20 FB C4 8D B8 C0 5A 42 1F 0A 12 E4 BF AE E4 BB 99 E3 80 81E8 85 BE E5 A4 A9 E5 B8 9D 10 15 18 00 20 97 86 80 B8 C0 5A 42 1F 0A 12 E4 BF AE E4 BB 99 E3 80 81 E9 9F A9 E8 80 81 E9 AD 94 10 14 18 00 20 F8 F0 DA B7 C0 5A 42 1C 0A 0F E4 BF AE E4 BB 99 E3 80 81 E9 81 93 E5 B0 8A 10 11 18 00 20 96 97 E0B7 C0 5A 42 13 0A 06 E7 9F B3 E6 98 8A 10 10 18 00 20 EC BB FF B7 C0 5A 42 1F 0A 12 E4 BF AE E4 BB 99 EF BD 9E E8 83 86 E6 B1 81 E7 BA A2 10 0F 18 00 20 CF FF F9 B7 C0 5A 42 1B 0A 0E E4 BF AE E4 BB 99 C2 B7 E7 81 B5 E8 80 80 10 09 18 00 20D8 BE 80 B8 C0 5A 42 1C 0A 0F E8 BE 9B E5 A4 A7 E6 B5 B7 E4 BB 99 E5 B0 8A 10 03 18 00 20 FD D0 84 B8 C0 5A 42 13 0A 06 E5 A2 A8 E7 99 BD 10 03 18 00 20 F2 F1 DA B7 C0 5A 42 1C 0A 0F E4 BF AE E4 BB 99 E4 B8 B6 E5 B2 81 E6 9C 88 10 03 18 00 20 AE D6 8B B8 C0 5A 42 1E 0A 11 E4 BF AE E4 BB 99 C2 B7 E7 9A AE E7 9A AE E5 8D 8E 10 02 18 00 20 E2 83 86 B8 C0 5A 52 1E 0A 0E E4 BF AE E4 BB99 C2 B7 E5 B1 B1 E5 90 9B 10 D7 C1 81 B8 C0 5A 18 F1 A9 8D D5 F1 31 52 1F 0A 0F E4 BF AE E4 BB 99 E4 B8 B6 E7 8C AA E7 8C AA 10 EF E3 E2 B7 C0 5A 18 FE C2 AE C9 F1 31 52 1F 0A 0F E4 BF AE E4 BB 99 EF BD 9E E6 82 9F E9 81 93 10 F1 BA D8 B7C0 5A 18 97 D5 EF F0 F1 31 52 1F 0A 0F E4 BF AE E4 BB 99 EF BD 9E E5 B0 8F E7 99 BD 10 FB D6 E7 B7 C0 5A 18 E5 CD 95 E7 F1 31 52 1E 0A 0E E4 BF AE E4 BB 99 C2 B7 E5 B0 88 E5 B1 AC 10 BA C9 DD B7 C0 5A 18 9A 9A D4 C3 F1 31 52 1F 0A 0F E4 BFAE E4 BB 99 E4 B8 B6 E9 98 BF E6 9F 9A 10 FE 9C DA B7 C0 5A 18 B4 E7 9D D1 F1 31 52 1F 0A 0F E4 BF AE E4 BB 99 E4 B8 B6 E6 A1 83 E5 A4 AD 10 B3 E8 E0 B7 C0 5A 18 93 9C C5 D5 F1 31 52 15 0A 05 41 6C 6F 68 61 10 C9 8F ED B7 C0 5A 18 A9 90 82ED F1 31 52 1E 0A 0E E4 BF AE E4 BB 99 C2 B7 E6 98 9F E5 90 9B 10 9D 81 ED B7 C0 5A 18 D2 E7 FB D6 F1 31 52 1C 0A 0C E5 90 89 E7 AB AF E5 A4 A9 E5 B0 8A 10 99 E2 E0 B7 C0 5A 18 E7 84 BC D6 F1 31 52 1E 0A 0E E4 BF AE E4 BB 99 C2 B7 E4 BB 99 E5 B0 8A 10 90 E4 F2 B7 C0 5A 18 E6 94 97 DB F1 31 52 1C 0A 0C E6 A8 8A E8 82 86 E5 B8 9D E5 90 9B 10 D7 86 E9 B7 C0 5A 18 AE C3 EF D4 F1 31 521E 0A 0E E4 BF AE E4 BB 99 C2 B7 E9 95 BF E9 9D 92 10 9C D4 DB B7 C0 5A 18 9A B0 DC D6 F1 31 52 1F 0A 0F E5 B9 BD E5 86 A5 E5 BD BC E5 B2 B8 E8 8A B1 10 94 DF FA B7 C0 5A 18 D3 87 DC E6 F1 31 52 1F 0A 0F E6 82 B2 E4 BC A4 E9 BA A6 E9 BA A6E9 B8 A1 10 D1 AC E8 B7 C0 5A 18 A9 83 88 E8 F1 31

71 AB 00 00 04 8C 00 00 08 75 00 00 02D4 07 01 81 E2
   砍价ID
08 AD 08
10 93 4E 18 01 20 97 93 B7 B1 06 28 E3 14 30 16 38 29

//2024/04/28 20:24:56 剩余 15:45:39 8:14:21 == 2024/04/28 12:10:35
10 93 4E 18 01 20 BB BB BC B1 06 28 D3 17 30 1B 38 29

71 AB 00 00 05 DC 00 00 08 75 00 00 02 D4 08 94 30 6F

08 E7 15
10 91 4E 18 01 20 C3 F8 BC B7 06 28 AD 16 30 2C 38 35
42 1A 0A 0C E5 8C BF E5 90 8D E7 8E A9 E5 AE B6 10 8C 04 18 00 20 E4 84 A2 C4 C0 5A
42 20 0A 12 E4 B8 80 E6 A2 A6 E3 80 81 E8 AF B4 E5 A5 BD E7 9A 84 10 DD 02 18 00 20 8B A7 B0 C4 C0 5A
42 1D 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 F0 9F 98 BE 4D 72 10 F0 01 18 00 20 E6 E2 9B C4 C0 5A
42 1D 0A 0F E7 A9 BA E6 9D AF E9 A5 AE E5 87 A1 E5 B0 98 10 E4 01 18 00 20 BA 9E A5 C4 C0 5A
42 17 0A 09 E7 86 8F E6 82 9F E7 A9 BA 10 DD 01 18 00 20 BF FC AB C4 C0 5A
42 1D 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 E6 95 A3 E4 BA BA 10 B2 01 18 00 20 B1 AD FA C4 C0 5A
42 1D 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 E5 A6 82 E8 8A B1 10 A9 01 18 00 20 CC F1 F1 C4 C0 5A
42 19 0A 0C E7 82 B9 E5 87 BB E8 BE 93 E5 85 A5 10 7B 18 00 20 A5 AB AA C4 C0 5A
42 1C 0A 0F E4 B8 80 E6 A2 A6 E3 80 81 E8 96 84 E8 8D B7 10 7B 18 00 20 AE C7 F5 C4 C0 5A
42 1C 0A 0F E9 BE 8D E3 80 81 E6 89 93 E7 81 AB E6 9C BA 10 48 18 00 20 F2 86 DF C4 C0 5A
42 1F 0A 12 E9 BE 8D E3 80 81 E5 8F 88 E8 A7 81 E9 A3 9E E5 88 80 10 40 18 00 20 A9 D3 D0 C4 C0 5A
42 1F 0A 12 E7 BB 99 E4 BD A0 E7 8E A9 E5 A6 B2 E5 B7 B1 E5 90 A7 10 3D 18 00 20 DD 9F B1 C4 C0 5A
42 16 0A 09 E5 BC A0 E6 97 A0 E5 BF 8C 10 31 18 00 20 E1 89 D9 C4 C0 5A
42 16 0A 09 E6 9D 8E E7 9B B8 E5 A4 B7 10 2B 18 00 20 9B AF 84 C4 C0 5A
42 1C 0A 0F E9 BE 8D E4 B8 B6 E5 90 B4 E5 BD A6 E7 A5 96 10 2B 18 00 20 A9 AF F5 C4 C0 5A
42 19 0A 0C E9 BE 8D E3 80 81 E4 BA 94 E6 AF 9B 10 23 18 00 20 EE 97 D2 C4 C0 5A
42 16 0A 09 58 C2 B7 E6 BE 84 E8 95 B4 10 23 18 00 20 F7 9E A9 C4 C0 5A
42 19 0A 0C E7 A7 8B E6 B0 8F E9 81 93 E5 B0 8A 10 19 18 00 20 8E 9B AD C4 C0 5A
42 13 0A 06 58 C2 B7 E5 88 9A 10 15 18 00 20 FF EB 9E C4 C0 5A
42 1C 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 E6 9C 88 E5 BD B1 10 14 18 00 20 FB 9F C5 C4 C0 5A
42 1F 0A 12 E5 A4 8F E5 80 99 E5 86 9C E8 BE B0 E5 A4 A9 E5 B0 8A 10 13 18 00 20 EF E0 D0 C4 C0 5A
42 1F 0A 12 E9 BE 8D E4 B8 B6 E9 A3 8E E6 9A B4 E4 B9 8B E7 81 B5 10 11 18 00 20 8D 89 EA C4 C0 5A
42 17 0A 0A E9 86 89 2E E8 8A B1 E8 83 A4 10 11 18 00 20 EF 9E B4 C4 C0 5A
42 1F 0A 12 E4 B8 80 E6 A2 A6 E4 B8 B6 E5 93 88 E5 93 88 E5 93 88 10 11 18 00 20 AD B4 D9 C4 C0 5A
42 10 0A 03 E6 80 9D 10 11 18 00 20 CD BD 86 C4 C0 5A
42 16 0A 09 58 C2 B7 E9 BB 84 E6 A1 83 10 0F 18 00 20 96 F1 B3 C4 C0 5A
42 1C 0A 0F E9 97 BB E9 A6 99 E8 AF 86 E5 A5 B3 E4 BA BA 10 0F 18 00 20 E1 C3 BF C4 C0 5A
42 19 0A 0C E9 BE 8D E4 B8 B6 E9 97 B2 E9 B1 BC 10 0E 18 00 20 FC F1 FC C4 C0 5A
42 19 0A 0C E9 BE 8D E4 B8 B6 E5 BE 98 E5 BE 8A 10 0D 18 00 20 88 A0 D2 C4 C0 5A
42 16 0A 09 E5 B1 B1 E9 9D 92 E9 9D 92 10 0D 18 00 20 F4 86 CC C4 C0 5A
42 16 0A 09 58 C2 B7 E5 B0 8F E5 B9 BD 10 0B 18 00 20 86 F0 B2 C4 C0 5A
42 1C 0A 0F E9 BE 8D E4 B8 B6 E9 BB 8F E8 8B 9E E7 B1 B3 10 0B 18 00 20 D3 D4 E4 C4 C0 5A
42 1C 0A 0F E4 B8 80 E5 BF B5 E4 B8 B6 E5 8D 83 E5 AF BB 10 0A 18 00 20 F4 99 EC C4 C0 5A
42 17 0A 0A E9 BE 8D 2E E9 A3 8E E9 9B B7 10 08 18 00 20 C6 EC CE C4 C0 5A
42 1C 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 E5 8D 83 E5 AF BB 10 06 18 00 20 A4 C2 8F C4 C0 5A
42 19 0A 0C E6 B7 B1 E5 A4 9C E8 80 81 E7 8C AB 10 05 18 00 20 CA D9 89 C4 C0 5A
42 1A 0A 0D E5 BC A5 E6 95 A6 E9 81 93 39 E5 8F B7 10 05 18 00 20 BC E2 C2 C4 C0 5A
42 1F 0A 12 E5 8F A4 E7 81 B5 E2 80 94 E7 97 9E E5 AD 90 E5 93 A5 10 05 18 00 20 F3 CC EF C4 C0 5A
42 16 0A 09 E9 BE 8D E2 80 A2 E8 88 9E 10 04 18 00 20 E1 87 C4 C4 C0 5A
42 16 0A 09 E8 B7 AF E6 BC AB E6 BC AB 10 04 18 00 20 E9 BF FA C4 C0 5A
42 1C 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 E6 B5 AE E5 B0 98 10 04 18 00 20 DB E1 CA C4 C0 5A
42 1C 0A 0F E4 B8 80 E6 A2 A6 E3 80 81 E5 A6 82 E4 B8 80 10 04 18 00 20 D8 89 CE C4 C0 5A
42 1C 0A 0F E4 B8 80 E6 A2 A6 E3 80 81 E5 A4 9C E7 A5 9E 10 03 18 00 20 F3 F5 FA C4 C0 5A
42 16 0A 09 E7 B2 89 E4 B8 AB E4 B8 AB 10 01 18 00 20 C3 C2 A4 C4 C0 5A

52 1F 0A 0F E4 B8 80 E6 A2 A6 E3 80 81 E8 A1 8C E6 AD A2 10 CD F9 D4 C4 C0 5A 18 F8 F7 E3 82 A1 32
52 1C 0A 0C E9 83 BD E5 B8 82 E9 9A B6 E4 BA BA 10 D8 EA D3 C4 C0 5A 18 FA A0 AF A4 A1 32
52 1F 0A 0F E4 B8 80 E6 A2 A6 E3 80 81 E5 A7 8B E7 BB 88 10 E8 ED E4 C4 C0 5A 18 A7 87 F5 BC A0 32
52 1E 0A 0E E4 B8 80 E6 A2 A6 C2 B7 E9 BB 84 E7 B2 B1 10 ED C1 BA C4 C0 5A 18 A8 A1 DB 91 A1 32
52 1C 0A 0C E9 BE 8D E4 B8 B6 E6 8E A2 E8 8A B1 10 8A B9 FA C4 C0 5A 18 FD DE C1 A5 A1 32
52 1F 0A 0F E4 B8 80 E6 A2 A6 E4 B8 B6 E5 85 AB E6 9C 88 10 AF B1 FE C4 C0 5A 18 F0 CE E3 C1 A0 32
52 22 0A 12 E4 B8 80 E6 A2 A6 E4 B8 B6 E7 9D A1 E8 BF 87 E5 A4 B4 10 B0 A8 CB C4 C0 5A 18 FD DE C1 A5 A1 32

*/
//妖盟砍价进度
func ParaBargainingProgressInfo(dataBytes []byte) D.BargainingProgressInfo {
	allInfo := D.BargainingProgressInfo{
		MinPrice: 9999,
		CutPrice: 0,
	}

	leftLen := len(dataBytes)
	if leftLen > 22 {
		allInfo.ID = BytesToHexStr(dataBytes[1:3])
	}
	Idx := 0
	allInfo.Time = time.Unix(ParaIntData(dataBytes[9:14]), 0)
	for Idx = 21; Idx < leftLen; {
		idx := Idx
		info := D.BargainingPeopleInfo{}
		dataLen := int(dataBytes[idx+1])
		nameLen := int(dataBytes[idx+3])
		//log.Debugf("%s", HexToHexStr(dataBytes[idx:idx+dataLen+2]))
		if dataBytes[idx] == 0x42 && dataBytes[idx+2] == 0x0A {
			info.Name = string(dataBytes[idx+4 : idx+nameLen+4])
			info.ID = BytesToHexStr(dataBytes[Idx+dataLen-4 : Idx+dataLen+2])
			idx += nameLen + 5
			if dataBytes[idx-1] != 0x10 {
				log.Debugf("dataBytes[idx]%02X != 0x10", dataBytes[idx-1])
				break
			}
			if dataBytes[Idx+dataLen-7] != 0x18 {
				log.Debugf("dataBytes[idx]%02X != 0x18", dataBytes[Idx+dataLen-7])
				break
			}
			if Idx+dataLen-4 > idx {
				price := int32(0)
				if Idx+dataLen-7-idx == 2 {
					price = int32(dataBytes[idx]) + 128*(int32(dataBytes[idx+1])-1)
				} else {
					price = int32(dataBytes[idx])
				}
				info.Price = price
				allInfo.CutPrice += price
				if info.Price < allInfo.MinPrice {
					allInfo.MinPrice = info.Price
				}
			}
			allInfo.Negotiated = append(allInfo.Negotiated, info)
			//log.Debugf("[%s]%s 议价仙玉%d", info.ID, info.Name, info.Price)
		} else if dataBytes[idx] == 0x52 && dataBytes[idx+2] == 0x0A {
			info.Name = string(dataBytes[idx+4 : idx+nameLen+4])
			idx += nameLen + 5
			if dataBytes[idx-1] != 0x10 {
				log.Debugf("dataBytes[idx]%02X != 0x10", dataBytes[idx-1])
				break
			}
			info.ID = BytesToHexStr(dataBytes[Idx : Idx+5])

			allInfo.UnPriced = append(allInfo.UnPriced, info)
			//log.Debugf("[%s]%s 还未议价", info.ID, info.Name)
		} else {
			break
		}
		Idx += dataLen + 2
	}
	return allInfo
}

/*

//
需要护送
08 00 12 08 08 F5 07 10 FF 45 20 3C 1A 16 08 01 10 04 18 04 20 C6 F1 BA B0 A9 32 28 D4 A3 CB B7 A8 32 30 01
08 00 12 08 08 E9 07 10 DB 43 20 08 1A 16 08 00 10 01 18 02 20 C8 90 D5 8B A8 32 28 86 E3 86 A4 A6 32 30 01 20 01
护送中
08 00 12 08 08 E9 07 10 DB 43 20 08 1A 16 08 01 10 01 18 02 20 C8 90 D5 8B A8 32 28 86 E3 86 A4 A6 32 30 01
护送完成
08 00 12 30 08 E9 07 10 8F 44 1A 26 0A 1F 31 30 30 30 30 39 3D 31 35 30 7C 31 30 30 30 33 32 3D 36 34 30 7C 31 30 30 30 30 34 3D 32 35 10 64 18 E9 07 20 3C 1A 16 08 01 10 04 18 02 20 C8 90 D5 8B A8 32 28 86 E3 86 A4 A6 32 3001
08 00 12 43 08 A4 4E 10 CB 44 1A 31 0A 29 31 30 30 30 33 32 3D 31 36 30 30 7C 31 30 30 30 30 34 3D 35 30 7C 31 30 30 30 32 35 3D 35 7C 31 30 30 30 30 39 3D 36 30 30 10 AC 02 18 A4 4E 20 3C 28 89 A2 88 9716 30 0A 1A 16 08 02 10 04 18 05 20 FB C9 EE B4 A8 32 28 D4 A3 CB B7 A8 32 30 01
全部完成
08 00 12 07 08 00 10 CB 44 20 3C 1A 16 08 0210 04 18 05 20 FB C9 EE B4 A8 32 28 D4 A3 CB B7 A8 32 30 01

//需要领取悬赏奖励
08 00 12 31 08 EC 07 10 A9 03 1A 27 0A 1F 31 30 30 30 30 39 3D 33 30 30 7C 31 30 30 30 33 32 3D 38 38 30 7C 31 30 30 31 30 31 3D 35 30 10 96 01 18 EC 07 20 22
08 00 12 2F 08 EC 07 10 18 1A 26 0A 1E 31 30 30 30 33 32 3D 38 38 30 7C 31 30 30 30 30 34 3D 37 35 7C 31 30 30 30 30 37 3D 31 30 10 96 01 18 EC 07 20 18
100032=880|100004=75|100007=10�� 
*/
//查看悬赏结果
func ParaDemonLeagueInfo(dataBytes []byte) D.DemonLeagueInfo {
	info := D.DemonLeagueInfo{
		Done:      false,
		NeedTake:  false,
		Taking:    false,
		NeedClaim: false,
	}
	dataLen := len(dataBytes)
	if dataBytes[0] != 0x08 && dataBytes[1] != 0 {
		return info
	}
	if dataLen < 6 {
		return info
	}
	data := BytesToHexStr(dataBytes)
	log.Infof("悬赏结果-%s", HexToHexStr(dataBytes))
	// 护送中                                       1 任务ID                             2 res0                     3是否已开始护送  4 res1           5 res2        6 时间            7时间           8 res3
	re := regexp.MustCompile(`12[0-9A-F]{2}08([0-9A-F]{2})0710(?:[0-9A-F]{2}){1,4}20([0-9A-F]{2})1A[0-9A-F]{2}08([0-9A-F]{2})10([0-9A-F]{2})18([0-9A-F]{2})20([0-9A-F]{12})28([0-9A-F]{12})30([0-9A-F]{2})`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) > 0 && len(res[0]) > 0 {
		info.ID = res[0][1] + "07"                  //任务ID
		info.Grade = OneByteHexStrToByte(res[0][1]) //等级
		info.Time0 = ParaHexStrToTimeMs(res[0][6])
		info.Time1 = ParaHexStrToTimeMs(res[0][7])
		if res[0][3] == "00" {
			info.NeedTake = true //需要护送
		} else {
			info.Taking = true //护送中
		}
		log.Infof("%+v", info)
		return info
	}
	// 护送完成                                     1 任务ID
	re1 := regexp.MustCompile(`12[0-9A-F]{2}08([0-9A-F]{4})10(?:[0-9A-F]{2}){1,4}1A[0-9A-F]{2}0A`)
	res1 := re1.FindAllStringSubmatch(data, -1)
	if len(res1) > 0 && len(res1[0]) > 0 {
		info.ID = res1[0][1]                         //任务ID
		info.Grade = OneByteHexStrToByte(res1[0][1]) //等级
		info.NeedClaim = true                        //护送完成
		log.Infof("%+v", info)
		return info
	}
	// 全部完成
	re2 := regexp.MustCompile(`080012[0-9A-F]{2}080010`)
	res2 := re2.FindAllStringSubmatch(data, -1)
	if len(res2) > 0 && len(res2[0]) > 0 {
		info.Done = true //护送完成
		log.Infof("%+v", info)
		return info
	}
	return info
}

/*

 */
//妖盟-查看所有道友悬赏情况结果
func ParaDemonLeagueAllPersonInfo(dataBytes []byte) D.DemonLeagueAllInfo {
	var allInfo D.DemonLeagueAllInfo
	data := BytesToHexStr(dataBytes)
	// 定义正则表达式
	re := regexp.MustCompile(`1A([0-9A-Fa-f]{2,4})08[0-9A-Fa-f]{4}10`)
	res := re.FindAllStringIndex(data, -1)
	if len(res) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	//																1 Userid       2 id                                3 name                  4 grade
	monster := regexp.MustCompile(`52(?:[0-9A-Fa-f]{2})08([0-9A-Fa-f]{12})10([0-9A-Fa-f]{4})1A(?:[0-9A-Fa-f]{2})((?:[0-9a-fA-F]{2})+?)20([0-9A-Fa-f]{2})`)
	regRes := monster.FindAllStringSubmatch(data, -1)
	// 打印结果
	for _, idx := range res {
		if idx[0]%2 != 0 || idx[1]%2 != 0 {
			continue
		}
		info := D.DemonLeagueAllPersonInfo{}
		startIdx := int(idx[0] / 2)
		totalNum := int(0)
		LocationIdx := startIdx
		if dataBytes[startIdx+2] == 0x08 {
			info.Grade = dataBytes[startIdx+3]
			totalNum = int(dataBytes[startIdx+1])
			LocationIdx += 8
		} else if dataBytes[startIdx+2]>>4 == 0x00 && dataBytes[startIdx+3] == 0x08 {
			info.Grade = dataBytes[startIdx+4]
			totalNum = int(dataBytes[startIdx+1]) + 128*int(dataBytes[startIdx+2]-1)
			LocationIdx += 9
		} else {
			log.Debugf("dataBytes[idx]%02X != 0x08", dataBytes[startIdx+2])
			continue
		}
		info.ID = BytesToHexStr(dataBytes[LocationIdx : LocationIdx+6])
		LocationIdx += 6

		if dataBytes[LocationIdx+4] == 0x08 {
			LocationIdx += 5
		} else if dataBytes[LocationIdx+4]>>4 == 0x00 && dataBytes[LocationIdx+5] == 0x08 {
			LocationIdx += 6
		} else {
			log.Debugf("dataBytes[idx]%02X != 0x08", dataBytes[LocationIdx+4])
			continue
		}
		info.UserID = BytesToHexStr(dataBytes[LocationIdx : LocationIdx+6])
		LocationIdx += 6

		//log.Debugf("%s", HexToHexStr(dataBytes[LocationIdx:startIdx+totalNum+2]))
		log.Debugf("%s", HexToHexStr(dataBytes[startIdx:startIdx+totalNum+2]))
		reName := regexp.MustCompile(`1A[0-9A-Fa-f]{2}(([0-9A-Fa-f]{2})+?)20([0-9A-Fa-f]{2,10})2A`)
		nameRes := reName.FindAllStringSubmatch(data[LocationIdx*2:(startIdx+totalNum+2)*2], -1)
		if len(nameRes) > 0 && len(nameRes[0]) >= 4 {
			//log.Debugf("Name %+v", nameRes[0])
			nameByte, _ := HexStrToBytes(nameRes[0][1])
			info.Name = string(nameByte)
			valByte, _ := HexStrToBytes(nameRes[0][3])
			info.CombatValue = ParaIntData(valByte)
			LocationIdx += len(nameRes[0][1]) / 2
		}

		reLeagueName := regexp.MustCompile(`2A[0-9A-Fa-f]{2}(([0-9A-Fa-f]{2})+?)30`)
		nameRes = reLeagueName.FindAllStringSubmatch(data[LocationIdx*2:(startIdx+totalNum+2)*2], -1)
		if len(nameRes) > 0 && len(nameRes[0]) > 2 {
			//log.Debugf("LeagueName %+v", nameRes[0])
			nameByte, _ := HexStrToBytes(nameRes[0][1])
			info.LeagueName = string(nameByte)
		}
		log.Infof("id:%s userID:%s [%s]的(%s) 妖力:%s 正在护送%s%02x", info.ID, info.UserID, info.LeagueName, info.Name, D.GetCombatValueDesc(info.CombatValue), D.GetDemonLeagueOfferGradeDesc(info.Grade), info.Grade)
		allInfo.PersonInfo = append(allInfo.PersonInfo, info)
	}
	sort.Sort(D.DemonLeagueAllPersonInfoSortByGrade(allInfo.PersonInfo))
	if len(regRes) > 0 {
		for _, data := range regRes {
			info := D.DemonLeagueAllMonsterInfo{}
			if len(data) > 0 {
				info.UserID = data[1] //用户ID
				info.ID = data[2]     //ID
				nameByte, _ := HexStrToBytes(data[3])
				info.Name = string(nameByte)              //用户名字
				info.Grade = OneByteHexStrToByte(data[4]) //护送的品级

				log.Infof("id:%s userID:%s [%s] 正在护送%02X", info.ID, info.UserID, info.Name, info.Grade)
				allInfo.MonsterInfo = append(allInfo.MonsterInfo, info)
			}
		}
	}
	return allInfo
}

/*
[DEBUG] [2024/10/09 22:02:05] [PRJ/websocket_apn/main_test.go]:[  193]:   ↑↑↑↑↑ S_UNION_BOUNTY_OPEN_MONSTER - len:25
[DEBUG] [2024/10/09 22:02:05] [PRJ/websocket_apn/main_test.go]:[  200]:   PayloadBytes: 71 AB 00 00 00 19 00 03 42 73 00 00 02 D4 07 01 81 E2 08 E2 83 86 B8 C0 5A
[DEBUG] [2024/10/09 22:02:05] [PRJ/websocket_apn/main_test.go]:[  195]:   ↓↓↓↓↓ S_UNION_BOUNTY_OPEN_MONSTER_RSP - len:780
[DEBUG] [2024/10/09 22:02:05] [PRJ/websocket_apn/main_test.go]:[  200]:   PayloadBytes: 71 AB 00 00 03 0C 00 00 35 33 00 00 02D4 07 01 81 E2 08 00 10 A3 4E 1A C4 01 08 01 12 97 01 08 01 10 CD E5 08 18 CD E5 08 20 95 4E 2A 1D 08 02 10 D1 FA 06 18 00 20 BD EA 01 28 00 30 BA 17 30 D6 0F 30 C8 17 30 DB 0F 30 DD 0F 2A 14 08 03 10 B9 82 07 18 00 20 C1 EA 01 28 00 30 EA07 30 D5 0F 32 0A 08 04 10 CB D0 07 18 03 20 00 32 0A 08 05 10 E8 C8 07 18 03 20 00 32 0A 08 06 10 E5 C8 07 18 04 20 00 3A 05 08 02 10 9A 11 3A 05 08 01 10 95 0A 3A 05 08 04 10 85 20 3A 05 08 03 10 9D 18 40 00 48 01 52 0F 08 F2 02 10 84 E419 10 B2 D4 19 10 B8 DB 19 18 96 A4 FD E4 37 20 90 4E 28 00 38 00 42 12 E9 9B A8 E8 BD A9 E4 B8 B6 E7 9A AE E7 9A AE E5 8D 8E 48 E2 83 86 B8 C0 5A 1A CC 01 08 08 12 A2 01 08 01 10 A6 E5 08 18 A6 E5 08 20 AF 4E 2A 1D 08 09 10 D1 FA 06 18 0020 BD EA 01 28 00 30 C8 17 30 CB 17 30 D1 17 30 BC 17 30 C3 17 2A 1D 08 0A 10 D7 FA 06 18 00 20 CD EA 01 28 00 30 BE 17 30 D6 0F 30 C7 17 30 D0 17 30 D2 17 32 0A 08 0B 10 CB D0 07 18 04 20 00 32 0A 08 0C 10 E7 C8 07 18 04 20 00 32 0A08 0D 10 E8 C8 07 18 03 20 00 3A 05 08 03 10 C8 1A 3A 05 08 01 10 95 0A 3A 05 08 04 10 CD 21 3A 05 08 02 10 FF 11 40 BA FC 08 48 02 52 0F 08 E9 02 10 B4 D4 19 10 9D E3 19 10 9B DC 19 18 F8 AE D6 D9 2E 20 90 4E 28 00 38 01 42 0F E9 9B A8 E8BD A9 E4 B8 B6 E6 97 A0 E7 95 8F 48 91 E7 87 B9 C0 5A 1A C6 01 08 0F 12 99 01 08 01 10 C7 E5 08 18 C7 E5 08 20 94 4E 2A 1A 08 10 10 D7 FA 06 18 00 20 CD EA 01 28 00 30 BB 17 30 C0 17 30 C6 17 30 DA 0F 2A 17 08 11 10 BC 82 07 18 00 20 C4 EA01 28 00 30 D7 0F 30 D2 0F 30 C2 17 32 0A 08 12 10 E5 C8 07 18 03 20 00 32 0A 08 13 10 CB D0 07 18 05 20 00 32 0A 08 14 10 E8 C8 07 18 04 20 00 3A 05 08 03 10 C8 1A 3A 05 08 01 10 F9 0A 3A 05 08 04 10 CD 21 3A 05 08 02 10 E6 12 40 BA FC 0848 01 52 0F 08 D7 02 10 83 E4 19 10 CE D3 19 10 9B DC 19 18 F3 B8 F2 FD 23 20 90 4E 28 00 38 02 42 12 E9 9B A8 E8 BD A9 E4 B8 B6 E6 A2 A6 E6 AD A6 E5 BD 93 48 AE E1 F0 B9 C0 5A 2A 8D 01 08 A3 4E 12 77 08 02 10 A3 4E 18 A3 4E 20 00 2A 0F 08 A4 4E 10 B9 82 07 18 00 20 C1 EA 01 28 00 2A 0F 08 A5 4E 10 B9 82 07 18 00 20 C1 EA 01 28 00 32 0B 08 A6 4E 10 E8 C8 07 18 04 20 00 32 0B 08 A74E 10 CB D0 07 18 03 20 00 32 0B 08 A8 4E 10 FA C0 07 18 05 20 00 3A 05 08 04 10 B4 22 3A 05 08 03 10 C8 1A 3A 05 08 01 10 FC 0A 3A 05 08 02 10 FF 11 40 00 48 00 52 02 08 00 18 87 84 AC 9B 5E 20 90 4E 28 00 38 05 42 00 48 00 38 89 A2 88 9716
08 00 10 A3 4E 1A C4 01 08 01 12 97 01 08 01 10 CD E5 08 18 CD E5 08 20 95

[DEBUG] [2024/10/09 22:04:02] [PRJ/websocket_apn/main_test.go]:[  193]:   ↑↑↑↑↑ S_UNION_BOUNTY_ATTACK_MONSTER - len:54
[DEBUG] [2024/10/09 22:04:02] [PRJ/websocket_apn/main_test.go]:[  200]:   PayloadBytes: 71 AB 00 00 00 36 00 03 42 74 00 00 02 D4 07 01 81 E2 0A 09 08 E2 83 86 B8 C0 5A 10 00 0A 09 08 91 E7 87 B9 C0 5A 10 010A 09 08 AE E1 F0 B9 C0 5A 10 02 10 A3 4E

*/

//查看妖盟悬赏怪物信息结果
func ParaDemonLeaguePersonInfo(dataBytes []byte) D.DemonLeagueInfo {
	info := D.DemonLeagueInfo{}
	if len(dataBytes) < 4 {
		return info
	}
	data := BytesToHexStr(dataBytes)
	// 匹配怪物ID					//    1 ID
	re1 := regexp.MustCompile(`080010((?:[0-9A-F]{2}){1,4})1A`)
	res1 := re1.FindAllStringSubmatch(data, -1)
	if len(res1) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	if len(res1) > 0 && len(res1[0]) > 0 {
		info.ID = res1[0][1] //任务ID
	}
	// 定义正则表达式					// 1 ID 				2 名字                3 用户ID
	re2 := regexp.MustCompile(`38(0[0-9])42[0-9A-F]{2}((?:[0-9A-F]{2})+?)48([0-9A-F]{12})(?:1A|2A)`)
	res2 := re2.FindAllStringSubmatch(data, -1)
	if len(res2) == 0 {
		log.Errorf("解析数据失败-%s", data)
	}
	for _, regRes := range res2 {
		person := D.DemonLeaguePersonInfo{
			ID:     regRes[1],                  //ID
			Name:   HexDataStrToStr(regRes[2]), //用户名字
			UserID: regRes[3],                  //用户ID
		}
		info.Person = append(info.Person, person)
	}
	log.Infof("%+v", info)
	return info
}
